package service;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.MoodleException;

/**
 * Синглетон с параметрами конфигурации клиента: доменным именем сервера,
 * маркером и форматом сообщений, считывающимися из файла config.properties.
 *
 * @author kgp
 */
public class MoodleRestWSConfigSingleton {
    
    private static MoodleRestWSConfigSingleton configSingleton;

    private final Properties configProps;

    private final String domainName;
    private final String token;
    private final String restFormat;

    private MoodleRestWSConfigSingleton() {
        this.configProps = loadConfigProperties();
        this.domainName = configProps.getProperty("domainName");
        this.token = configProps.getProperty("token");
        this.restFormat = configProps.getProperty("restFormat");
    }

    /**
     * Метод получения объекта=синглетона конфигурации клиента.
     * @return объект конфигурации клиента
     */
    public static MoodleRestWSConfigSingleton getInstance() {
        if (configSingleton == null) {
            configSingleton = new MoodleRestWSConfigSingleton();
        }
        return configSingleton;
    }

    /**
     * Загрузка файла свойств config.properties в объект Properties.
     */
    private Properties loadConfigProperties() {
        //TODO Исследовать отладчиком при отсутствии файла config.properties. Почему то управление не передаётся в блок catch!!!!
        Properties props = null;
        try {
            props = new Properties();
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties");
            props.load(in);
            in.close();
        } catch (IOException ex) {
            new MoodleException("configuration", "configfilenotfound", "Prperties file with config settings was not found");
            Logger.getLogger(MoodleRestWSConfigSingleton.class.getName()).log(Level.SEVERE, "Prperties file with config settings was not found", ex);
        }
        return props;
    }

    public String getDomainName() {
        return domainName;
    }

    public String getToken() {
        return token;
    }

    public String getRestFormat() {
        return restFormat;
    }
}
